﻿#!/usr/bin/env python3
# -*- coding: utf-8 -*-

#Python引入了with语句来自动帮我们调用close()方法
with open('C:/Users/liaoxiaojun/Desktop/temp.txt', 'r', encoding='utf-8', errors='ignore') as f:
    print(f.read())

#要读取二进制文件，比如图片、视频等等，用'rb'模式打开文件即可：
f = open('C:/Users/liaoxiaojun/Desktop/1.png', 'rb')

#以'w'模式写入文件时，如果文件已存在，会直接覆盖（相当于删掉后新写入一个文件）。如果我们希望追加到文件末尾怎么办？可以传入'a'以追加（append）模式写入
with open('C:/Users/liaoxiaojun/Desktop/temp.txt', 'a') as f:
    f.write('Hello, world!')

#要把str写入StringIO，我们需要先创建一个StringIO，然后，像文件一样写入即可;要把str写入StringIO，我们需要先创建一个StringIO，然后，像文件一样写入即可
from io import StringIO
f = StringIO()
f.write('hello')
f.write(' ')
f.write('world!')
print(f.getvalue())

#StringIO操作的只能是str，如果要操作二进制数据，就需要使用BytesIO
from io import BytesIO
f = BytesIO()
f.write('中文'.encode('utf-8'))
print(f.getvalue())



#Python内置的os模块也可以直接调用操作系统提供的接口函数
import os
print(os.name)

#在操作系统中定义的环境变量，全部保存在os.environ这个变量中
#print(os.environ)
#print(os.environ.get('PATH'))

# 查看当前目录的绝对路径:
print(os.path.abspath('.'))
# 在某个目录下创建一个新目录，首先把新目录的完整路径表示出来:
# 然后创建一个目录:
os.mkdir(os.path.join('C:/Users/liaoxiaojun/Desktop/', 'testdir'))
# 删掉一个目录:
os.rmdir('C:/Users/liaoxiaojun/Desktop/testdir')
#通过os.path.split()函数，这样可以把一个路径拆分为两部分，后一部分总是最后级别的目录或文件名
#这些合并、拆分路径的函数并不要求目录和文件要真实存在，它们只对字符串进行操作
print(os.path.split('C:/Users/liaoxiaojun/Desktop/temp.txt'))
print(os.path.splitext('C:/Users/liaoxiaojun/Desktop/temp.txt'))


# 对当前文件重命名:
#os.rename('test.txt', 'test.py')
# 删掉文件:
#os.remove('test.py')


print([x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py'])

#shutil模块提供了copyfile()的函数，你还可以在shutil模块中找到很多实用函数，它们可以看做是os模块的补充
import shutil
shutil.copyfile('1-profile.txt','1-profile.txt.bak')

#Python提供了pickle模块来实现序列化
import pickle
d = dict(name='Bob', age=20, score=88)
f = open('dump.txt', 'wb')
pickle.dump(d, f)
f.close()
f = open('dump.txt', 'rb')
dd = pickle.load(f)
f.close()
print(dd)


#Python内置的json模块提供了非常完善的Python对象到JSON格式的转换
import json
d = dict(name='Bob', age=20, score=88)
print(json.dumps(d))

json_str = '{"age": 20, "score": 88, "name": "Bob"}'
print(json.loads(json_str))

































